package Sjakk;

import java.io.Serializable;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Programmeringsprosjekt 2011 / Gruppe 2
 * @author Fjogen (Vegard Fjogstad)
 */
public class Brett implements Serializable {
    Brikke[][] brett;
    String sjekkFarge;
    String sjakk;
    String beskjeder;
    int sjakkPosX;
    int sjakkPosY;
    int kongePosX;
    int kongePosY;
    int rokadePosX;
    int rokadePosY;
    boolean rokade;
    boolean hindreSjakk;
    public Brett(){
        brett = new Brikke[8][8];
        sjekkFarge = "Svart";
        sjakk = "Nei";
        beskjeder = "Hvit starter.";
    }
    public void resetBrett(){
        brett[0][0] = new Taarn("sT", "Svart", 0, 0, true);
        brett[0][1] = new Hest("sH", "Svart", 0, 1, true);
        brett[0][2] = new Loper("sL", "Svart", 0, 2, true);
        brett[0][3] = new Konge("sK", "Svart", 0, 3, true);
        brett[0][4] = new Dronning("sD", "Svart", 0, 4, true);
        brett[0][5] = new Loper("sL", "Svart", 0, 5, true);
        brett[0][6] = new Hest("sH", "Svart", 0, 6, true);
        brett[0][7] = new Taarn("sT", "Svart", 0, 7, true);
        brett[1][0] = new Bonde("sB", "Svart", 1, 0, true);
        brett[1][1] = new Bonde("sB", "Svart", 1, 1, true);
        brett[1][2] = new Bonde("sB", "Svart", 1, 2, true);
        brett[1][3] = new Bonde("sB", "Svart", 1, 3, true);
        brett[1][4] = new Bonde("sB", "Svart", 1, 4, true);
        brett[1][5] = new Bonde("sB", "Svart", 1, 5, true);
        brett[1][6] = new Bonde("sB", "Svart", 1, 6, true);
        brett[1][7] = new Bonde("sB", "Svart", 1, 7, true);
        for(int i=2;i<6;i++){
            for(int j=0;j<7;j++){
                brett[i][j] = null;
                //System.out.println(brett[i][j]);
            }
        }
        brett[7][0] = new Taarn("hT", "Hvit", 7, 0, true);
        brett[7][1] = new Hest("hH", "Hvit", 7, 1, true);
        brett[7][2] = new Loper("hL", "Hvit", 7, 2, true);
        brett[7][3] = new Konge("hK", "Hvit", 7, 3, true);
        brett[7][4] = new Dronning("hD", "Hvit", 7, 4, true);
        brett[7][5] = new Loper("hL", "Hvit", 7, 5, true);
        brett[7][6] = new Hest("hH", "Hvit", 7, 6, true);
        brett[7][7] = new Taarn("hT", "Hvit", 7, 7, true);
        brett[6][0] = new Bonde("hB", "Hvit", 6, 0, true);
        brett[6][1] = new Bonde("hB", "Hvit", 6, 1, true);
        brett[6][2] = new Bonde("hB", "Hvit", 6, 2, true);
        brett[6][3] = new Bonde("hB", "Hvit", 6, 3, true);
        brett[6][4] = new Bonde("hB", "Hvit", 6, 4, true);
        brett[6][5] = new Bonde("hB", "Hvit", 6, 5, true);
        brett[6][6] = new Bonde("hB", "Hvit", 6, 6, true);
        brett[6][7] = new Bonde("hB", "Hvit", 6, 7, true);
        beskjeder = "Brikkene har flyttet seg til sine opprinnelige posisjoner.";
    }
    public void tegnBrett(){
        for(int i=0;i<brett.length;i++){
            for(int j=0;j<brett.length;j++){
                if(brett[i][j]==null){
                    System.out.print("[  ]");
                    if(j==7){
                        System.out.print("\n");
                    }
                } else {
                    System.out.print("[" + brett[i][j].getId() + "]");
                    if(j==7){
                        System.out.print("\n");
                    }
                }
            }
        }
    }
    public boolean sjekkPosisjon(int posX, int posY){
        if(posX==10 && posY==10 || brett[posX][posY] != null){
            return true; // Det står en brikke på denne posisjonen.
        } else {
            return false; // Ledig plass!
        }
    }
    public Brikke getBrikke(int posX, int posY){
        return brett[posX][posY];
    }
    public Brikke[][] getBrett(){
        return brett;
    }
    public void setBrett(Brikke[][] brett){
        this.brett = brett;
    }
    public void flyttBrikke(Brikke brikke, int sluttPosX, int sluttPosY, int[][] lovligeFlytt){
        int startPosX = brikke.getPosX();
        int startPosY = brikke.getPosY();
        /*
         * Sjekker om det gitte flyttet faktisk ligger i tabellen lovligeflytt.
         * Utfører hvis den gjør det.
         */
         for(int i=0;i<lovligeFlytt.length;i++){
            if(lovligeFlytt[i][0] !=10 && lovligeFlytt[i][1] !=10){
                if(sluttPosX == lovligeFlytt[i][0] && sluttPosY == lovligeFlytt[i][1]){
                    if(sjekkPosisjon(sluttPosX, sluttPosY) == false){
                        brett[startPosX][startPosY] = null;
                        brett[sluttPosX][sluttPosY] = brikke;
                        brikke.setPosisjon(sluttPosX, sluttPosY);
                        brikke.setStartPos(false);
                        sjekkFarge = brikke.getFarge();
                        if(brikke instanceof Bonde && sluttPosX==0){
                            brett[sluttPosX][sluttPosY] = new Dronning("hD", "Hvit", sluttPosX, sluttPosY, false);
                        } else if(brikke instanceof Bonde && sluttPosX==7 && !brikke.getStartPos()){
                            brett[sluttPosX][sluttPosY] = new Dronning("hD", "Svart", sluttPosX, sluttPosY, false);
                        }
                        if(fremtidigSjakk(brikke, sluttPosX, sluttPosY)){
                            beskjeder = sjakk+" står i sjakk.";
                        } else {
                            beskjeder = brikke.getId()+" flyttet seg fra ("+startPosX+" "+startPosY+") til ("+sluttPosX+" "+sluttPosY+").";
                        }
                        if(hindreSjakk){
                            beskjeder = sjakk+" står ikke lenger i sjakk.";
                            sjakk="Nei";
                            hindreSjakk = false;
                        }
                        if(sluttPosX==rokadePosX && sluttPosY==rokadePosY || rokade){
                            /*
                             * Hvis sluttposisjonen til en konge gir rokade, flyttes tårnet i ifsetningene under.
                             * Sjekker hvilket tårn som skal flyttes.
                             */
                            if(sluttPosX==0 && sluttPosY==1){
                                Brikke taarn = getBrikke(0, 0);
                                taarn.setPosisjon(0, 2);
                                taarn.setStartPos(false);
                                brett[0][0] = null;
                                brett[0][2] = taarn;
                                rokade = false;
                            } else if(sluttPosX==0 && sluttPosY==6){
                                Brikke taarn = getBrikke(0, 0);
                                taarn.setPosisjon(0, 5);
                                taarn.setStartPos(false);
                                brett[0][7] = null;
                                brett[0][5] = taarn;
                                rokade = false;
                            } else if(sluttPosX==7 && sluttPosY==1){
                                Brikke taarn = getBrikke(7, 0);
                                taarn.setPosisjon(7, 2);
                                taarn.setStartPos(false);
                                brett[7][0] = null;
                                brett[7][2] = taarn;
                                rokade = false;
                            } else if(sluttPosX==7 && sluttPosY==6){
                                Brikke taarn = getBrikke(7, 7);
                                taarn.setPosisjon(7, 5);
                                taarn.setStartPos(false);
                                brett[7][7] = null;
                                brett[7][5] = taarn;
                                rokade = false;
                            }
                        }
                    } else if(brett[startPosX][startPosY].getFarge().equals(brett[sluttPosX][sluttPosY].getFarge())) { // Opptatt rute, samme farge.
                        beskjeder = "Plassen er tatt av en lik farget brikke";
                    } else {
                        if(fremtidigSjakk(brikke, sluttPosX, sluttPosY)){
                            beskjeder = sjakk+" står i sjakk.";
                        } else {
                            beskjeder = brikke.getId() + " slo ut " + brett[sluttPosX][sluttPosY].getId();
                        }
                        brett[startPosX][startPosY] = null;
                        brett[sluttPosX][sluttPosY] = brikke;
                        brikke.setPosisjon(sluttPosX, sluttPosY);
                        brikke.setStartPos(false);
                        sjekkFarge = brikke.getFarge();
                        if(brikke instanceof Bonde && sluttPosX==0){
                            brett[sluttPosX][sluttPosY] = new Dronning("hD", "Hvit", sluttPosX, sluttPosY, false);
                        } else if(brikke instanceof Bonde && sluttPosX==7 && !brikke.getStartPos()){
                            brett[sluttPosX][sluttPosY] = new Dronning("hD", "Svart", sluttPosX, sluttPosY, false);
                        }
                        if(hindreSjakk){
                            beskjeder = sjakk+" står ikke lenger i sjakk.";
                            sjakk="Nei";
                            hindreSjakk = false;
                        }
                    }
                }
            }
        }
    }
    public boolean fremtidigSjakk(Brikke brikke, int sluttPosX, int sluttPosY){
        int posX = brikke.getPosX();
        int posY = brikke.getPosY();
        brikke.setPosisjon(sluttPosX, sluttPosY);
        int[][] fremtidigeFlytt = getLovligeFlytt(brikke);
        for(int i=0;i<fremtidigeFlytt.length;i++){
            if(!(fremtidigeFlytt[i][0]<0 || fremtidigeFlytt[i][1]<0 || fremtidigeFlytt[i][0]>7 || fremtidigeFlytt[i][1]>7)){
                if(sjekkPosisjon(fremtidigeFlytt[i][0], fremtidigeFlytt[i][1])){
                    if(getBrikke(fremtidigeFlytt[i][0], fremtidigeFlytt[i][1]).erKonge()){
                        if(!(getBrikke(fremtidigeFlytt[i][0], fremtidigeFlytt[i][1]).getFarge().equals(brikke.getFarge()))){
                            sjakk = getBrikke(fremtidigeFlytt[i][0], fremtidigeFlytt[i][1]).getFarge();
                            sjakkPosX = brikke.getPosX();
                            sjakkPosY = brikke.getPosY();
                            kongePosX = fremtidigeFlytt[i][0];
                            kongePosY = fremtidigeFlytt[i][1];
                            brikke.setPosisjon(posX, posY);
                            System.out.println(sjakkPosX+" sjakkPosX "+sjakkPosY+"\n"+kongePosX+" kongePosX "+kongePosY);
                            return true;
                        }
                    }
                }
            }
        }
        brikke.setPosisjon(posX, posY);
        return false;
    }
    public int[][] hindreSjakk(Brikke brikke, int[][] lovligeFlytt){
        hindreSjakk = true;
        int[][] hindreSjakk = new int[lovligeFlytt.length][2];
        Brikke sjakkBrikke = getBrikke(sjakkPosX, sjakkPosY);
        if(sjakkBrikke instanceof Bonde){
            for(int i=0;i<lovligeFlytt.length;i++){
                if(lovligeFlytt[i][0]==sjakkPosX && lovligeFlytt[i][1]==sjakkPosY){
                    hindreSjakk[i][0] = lovligeFlytt[i][0];
                    hindreSjakk[i][1] = lovligeFlytt[i][1];
                } else if(brikke.erKonge()){
                    hindreSjakk[i][0] = lovligeFlytt[i][0];
                    hindreSjakk[i][1] = lovligeFlytt[i][1];
                } else {
                    hindreSjakk[i][0] = 10;
                    hindreSjakk[i][1] = 10;
                }
            }
            return hindreSjakk;
        } else if(sjakkBrikke instanceof Taarn) {
            for(int i=0;i<lovligeFlytt.length;i++){
                if(lovligeFlytt[i][0]==sjakkPosX && lovligeFlytt[i][1]==sjakkPosY){
                    hindreSjakk[i][0] = lovligeFlytt[i][0];
                    hindreSjakk[i][1] = lovligeFlytt[i][1];
                } else if(sjakkPosX==kongePosX){
                    if(lovligeFlytt[i][0]==sjakkPosX && brikke.erKonge()==false){
                        hindreSjakk[i][0] = lovligeFlytt[i][0];
                        hindreSjakk[i][1] = lovligeFlytt[i][1];
                    } else if(brikke.erKonge()){
                        if(lovligeFlytt[i][0]!=sjakkPosX && lovligeFlytt[i][1]!=sjakkPosY){
                            hindreSjakk[i][0] = lovligeFlytt[i][0];
                            hindreSjakk[i][1] = lovligeFlytt[i][1];
                        } else {
                            hindreSjakk[i][0] = 10;
                            hindreSjakk[i][1] = 10;
                        }
                    } else {
                        hindreSjakk[i][0] = 10;
                        hindreSjakk[i][1] = 10;
                    }
                } else if(sjakkPosY==kongePosY){
                    if(lovligeFlytt[i][1]==sjakkPosY && brikke.erKonge()==false){
                        hindreSjakk[i][0] = lovligeFlytt[i][0];
                        hindreSjakk[i][1] = lovligeFlytt[i][1];
                    } else if(brikke.erKonge()){
                        if(lovligeFlytt[i][0]==sjakkPosX || lovligeFlytt[i][1]==sjakkPosY){
                            hindreSjakk[i][0] = 10;
                            hindreSjakk[i][1] = 10;
                        } else {
                            hindreSjakk[i][0] = lovligeFlytt[i][0];
                            hindreSjakk[i][1] = lovligeFlytt[i][1];
                        }
                    } else {
                        hindreSjakk[i][0] = 10;
                        hindreSjakk[i][1] = 10;
                    }
                } else {
                    hindreSjakk[i][0] = 10;
                    hindreSjakk[i][1] = 10;
                }
            }
            return hindreSjakk;
        } else if(sjakkBrikke instanceof Hest){
            int[][] hestSjakk = sjakkBrikke.lovligeFlytt();
            for(int i=0;i<lovligeFlytt.length;i++){
                if(lovligeFlytt[i][0]==sjakkPosX && lovligeFlytt[i][1]==sjakkPosY){
                    hindreSjakk[i][0] = lovligeFlytt[i][0];
                    hindreSjakk[i][1] = lovligeFlytt[i][1];
                } else if(brikke.erKonge()){
                    for(int j=0;j<hestSjakk.length;j++){
                        if(lovligeFlytt[i][0]==hestSjakk[j][0] && lovligeFlytt[i][1]==hestSjakk[j][1]){
                            hindreSjakk[i][0] = 10;
                            hindreSjakk[i][1] = 10;
                        } else {
                            hindreSjakk[i][0] = lovligeFlytt[i][0];
                            hindreSjakk[i][1] = lovligeFlytt[i][1];
                        }
                    }
                } else {
                    hindreSjakk[i][0] = 10;
                    hindreSjakk[i][1] = 10;
                }
            }
            return hindreSjakk;
        } else if(sjakkBrikke instanceof Loper){
            for(int i=0;i<lovligeFlytt.length;i++){
                if(lovligeFlytt[i][0]==sjakkPosX && lovligeFlytt[i][1]==sjakkPosY){
                    hindreSjakk[i][0] = lovligeFlytt[i][0];
                    hindreSjakk[i][1] = lovligeFlytt[i][1];
                } else {
                    for(int j=0;j<8;j++){
                        if(kongePosX<sjakkPosX && kongePosY<sjakkPosY){
                            if(lovligeFlytt[i][0]<kongePosX && lovligeFlytt[i][1]<kongePosY){
                                hindreSjakk[i][0] = 10;
                                hindreSjakk[i][1] = 10;
                            } else if(lovligeFlytt[i][0]==sjakkPosX-j && lovligeFlytt[i][1]==sjakkPosY-j){
                                if(brikke.erKonge()){
                                    hindreSjakk[i][0] = 10;
                                    hindreSjakk[i][1] = 10;                                    
                                } else {
                                    hindreSjakk[i][0] = lovligeFlytt[i][0];
                                    hindreSjakk[i][1] = lovligeFlytt[i][1];
                                    i++;
                                }     
                            } else {
                                hindreSjakk[i][0] = 10;
                                hindreSjakk[i][1] = 10;
                            }
                        } else if (kongePosX>sjakkPosX && kongePosY>sjakkPosY) {
                            if(lovligeFlytt[i][0]>kongePosX && lovligeFlytt[i][1]>kongePosY){
                                hindreSjakk[i][0] = 10;
                                hindreSjakk[i][1] = 10;
                            } else if(lovligeFlytt[i][0]==sjakkPosX+j && lovligeFlytt[i][1]==sjakkPosY+j){
                                if(brikke.erKonge()){
                                    hindreSjakk[i][0] = 10;
                                    hindreSjakk[i][1] = 10;
                                } else {
                                    hindreSjakk[i][0] = lovligeFlytt[i][0];
                                    hindreSjakk[i][1] = lovligeFlytt[i][1];
                                    i++;
                                }
                            } else {
                                hindreSjakk[i][0] = 10;
                                hindreSjakk[i][1] = 10;
                            }
                        } else if (kongePosX>sjakkPosX && kongePosY<sjakkPosY) {
                            if(lovligeFlytt[i][0]>kongePosX && lovligeFlytt[i][1]<kongePosY){
                                hindreSjakk[i][0] = 10;
                                hindreSjakk[i][1] = 10;
                            } else if(lovligeFlytt[i][0]==sjakkPosX+j && lovligeFlytt[i][1]==sjakkPosY-j){
                                if(brikke.erKonge()){
                                    hindreSjakk[i][0] = 10;
                                    hindreSjakk[i][1] = 10;
                                } else {
                                    hindreSjakk[i][0] = lovligeFlytt[i][0];
                                    hindreSjakk[i][1] = lovligeFlytt[i][1];
                                    i++;
                                }
                            } else {
                                hindreSjakk[i][0] = 10;
                                hindreSjakk[i][1] = 10;
                            }
                        } else if (kongePosX<sjakkPosX && kongePosY>sjakkPosY) {
                            if(lovligeFlytt[i][0]<kongePosX && lovligeFlytt[i][1]>kongePosY){
                                hindreSjakk[i][0] = 10;
                                hindreSjakk[i][1] = 10;
                            } else if(lovligeFlytt[i][0]==sjakkPosX-j && lovligeFlytt[i][1]==sjakkPosY+j){
                                if(brikke.erKonge()){
                                    hindreSjakk[i][0] = 10;
                                    hindreSjakk[i][1] = 10;
                                } else {
                                    hindreSjakk[i][0] = lovligeFlytt[i][0];
                                    hindreSjakk[i][1] = lovligeFlytt[i][1];
                                    i++;
                                }
                            } else {
                                hindreSjakk[i][0] = 10;
                                hindreSjakk[i][1] = 10;
                            }
                        }
                    }
                }
            }
            return hindreSjakk;
        } else if(sjakkBrikke instanceof Dronning){
            for(int i=0;i<lovligeFlytt.length;i++){
                if(lovligeFlytt[i][0]==sjakkPosX && lovligeFlytt[i][1]==sjakkPosY){
                    hindreSjakk[i][0] = lovligeFlytt[i][0];
                    hindreSjakk[i][1] = lovligeFlytt[i][1];
                } else if(sjakkPosX==kongePosX){
                    if(lovligeFlytt[i][0]==sjakkPosX && brikke.erKonge()==false){
                        hindreSjakk[i][0] = lovligeFlytt[i][0];
                        hindreSjakk[i][1] = lovligeFlytt[i][1];
                    } else if(brikke.erKonge()){
                        if(lovligeFlytt[i][0]!=sjakkPosX && lovligeFlytt[i][1]!=sjakkPosY){
                            hindreSjakk[i][0] = lovligeFlytt[i][0];
                            hindreSjakk[i][1] = lovligeFlytt[i][1];
                        } else {
                            hindreSjakk[i][0] = 10;
                            hindreSjakk[i][1] = 10;
                        }
                    } else {
                        hindreSjakk[i][0] = 10;
                        hindreSjakk[i][1] = 10;
                    }
                } else if(sjakkPosY==kongePosY){
                    if(lovligeFlytt[i][1]==sjakkPosY && brikke.erKonge()==false){
                        hindreSjakk[i][0] = lovligeFlytt[i][0];
                        hindreSjakk[i][1] = lovligeFlytt[i][1];
                    } else if(brikke.erKonge()){
                        if(lovligeFlytt[i][0]==sjakkPosX || lovligeFlytt[i][1]==sjakkPosY){
                            hindreSjakk[i][0] = 10;
                            hindreSjakk[i][1] = 10;
                        } else {
                            hindreSjakk[i][0] = lovligeFlytt[i][0];
                            hindreSjakk[i][1] = lovligeFlytt[i][1];
                        }
                    } else {
                        hindreSjakk[i][0] = 10;
                        hindreSjakk[i][1] = 10;
                    }
                } else {
                    hindreSjakk[i][0] = 10;
                    hindreSjakk[i][1] = 10;
                }
            }
            for(int i=0;i<lovligeFlytt.length;i++){
                if(lovligeFlytt[i][0]==sjakkPosX && lovligeFlytt[i][1]==sjakkPosY){
                    hindreSjakk[i][0] = lovligeFlytt[i][0];
                    hindreSjakk[i][1] = lovligeFlytt[i][1];
                } else {
                    for(int j=0;j<8;j++){
                        if(kongePosX<sjakkPosX && kongePosY<sjakkPosY){
                            if(lovligeFlytt[i][0]<kongePosX && lovligeFlytt[i][1]<kongePosY){
                                hindreSjakk[i][0] = 10;
                                hindreSjakk[i][1] = 10;
                            } else if(lovligeFlytt[i][0]==sjakkPosX-j && lovligeFlytt[i][1]==sjakkPosY-j){
                                if(brikke.erKonge()){
                                    hindreSjakk[i][0] = 10;
                                    hindreSjakk[i][1] = 10;
                                } else {
                                    hindreSjakk[i][0] = lovligeFlytt[i][0];
                                    hindreSjakk[i][1] = lovligeFlytt[i][1];
                                    i++;
                                }
                            } else {
                                hindreSjakk[i][0] = 10;
                                hindreSjakk[i][1] = 10;
                            }
                        } else if (kongePosX>sjakkPosX && kongePosY>sjakkPosY) {
                            if(lovligeFlytt[i][0]>kongePosX && lovligeFlytt[i][1]>kongePosY){
                                hindreSjakk[i][0] = 10;
                                hindreSjakk[i][1] = 10;
                            } else if(lovligeFlytt[i][0]==sjakkPosX+j && lovligeFlytt[i][1]==sjakkPosY+j){
                                if(brikke.erKonge()){
                                    hindreSjakk[i][0] = 10;
                                    hindreSjakk[i][1] = 10;
                                } else {
                                    hindreSjakk[i][0] = lovligeFlytt[i][0];
                                    hindreSjakk[i][1] = lovligeFlytt[i][1];
                                    i++;
                                }
                            } else {
                                hindreSjakk[i][0] = 10;
                                hindreSjakk[i][1] = 10;
                            }
                        } else if (kongePosX>sjakkPosX && kongePosY<sjakkPosY) {
                            if(lovligeFlytt[i][0]>kongePosX && lovligeFlytt[i][1]<kongePosY){
                                hindreSjakk[i][0] = 10;
                                hindreSjakk[i][1] = 10;
                            } else if(lovligeFlytt[i][0]==sjakkPosX+j && lovligeFlytt[i][1]==sjakkPosY-j){
                                if(brikke.erKonge()){
                                    hindreSjakk[i][0] = 10;
                                    hindreSjakk[i][1] = 10;
                                } else {
                                    hindreSjakk[i][0] = lovligeFlytt[i][0];
                                    hindreSjakk[i][1] = lovligeFlytt[i][1];
                                    i++;
                                }
                            } else {
                                hindreSjakk[i][0] = 10;
                                hindreSjakk[i][1] = 10;
                            }
                        } else if (kongePosX<sjakkPosX && kongePosY>sjakkPosY) {
                            if(lovligeFlytt[i][0]<kongePosX && lovligeFlytt[i][1]>kongePosY){
                                hindreSjakk[i][0] = 10;
                                hindreSjakk[i][1] = 10;
                            } else if(lovligeFlytt[i][0]==sjakkPosX-j && lovligeFlytt[i][1]==sjakkPosY+j){
                                if(brikke.erKonge()){
                                    hindreSjakk[i][0] = 10;
                                    hindreSjakk[i][1] = 10;
                                } else {
                                    hindreSjakk[i][0] = lovligeFlytt[i][0];
                                    hindreSjakk[i][1] = lovligeFlytt[i][1];
                                    i++;
                                }
                            } else {
                                hindreSjakk[i][0] = 10;
                                hindreSjakk[i][1] = 10;
                            }
                        }
                    }
                }
            }
            return hindreSjakk;
        }
        return brikke.lovligeFlytt();
    }
    public int[][] getRokade(Brikke brikke, int[][] lovligeFlytt){
        int[][] lovligeRokadeFlytt = new int[10][2];
        boolean rokade1 = true;
        boolean rokade2 = true;
        boolean rokade3 = true;
        boolean rokade4 = true;
        for(int i=0;i<lovligeFlytt.length;i++){
            lovligeRokadeFlytt[i][0] = lovligeFlytt[i][0];
            lovligeRokadeFlytt[i][1] = lovligeFlytt[i][1];
        }
        if(brikke.getFarge().equals("Hvit")){
            if(getBrikke(7, 0).getStartPos()){
                for(int i=1;i<3;i++){
                    if(sjekkPosisjon(7, i)==true){
                        rokade1 = false;
                    }
                }
            }
            if(getBrikke(7, 7).getStartPos()){
                for(int i=4;i<7;i++){
                    if(sjekkPosisjon(7, i)==true){
                        rokade2 = false;
                    }
                }
            }
        } else if(brikke.getFarge().equals("Svart")){
            if(getBrikke(0, 0).getStartPos()){
                for(int i=1;i<3;i++){
                    if(sjekkPosisjon(0, i)==true){
                        rokade3 = false;
                    }
                }
            }
            if(getBrikke(0, 7).getStartPos()){
                for(int i=4;i<7;i++){
                    if(sjekkPosisjon(0, i)==true){
                        rokade4 = false;
                    }
                }
            }
        }
        if(rokade1 && rokade2 && brikke.getFarge().equals("Hvit")){
            lovligeRokadeFlytt[8][0] = 7;
            lovligeRokadeFlytt[8][1] = 1;
            lovligeRokadeFlytt[9][0] = 7;
            lovligeRokadeFlytt[9][1] = 6;
            rokade = true;
            return lovligeRokadeFlytt;
        } else if(rokade1 && brikke.getFarge().equals("Hvit")){
            lovligeRokadeFlytt[8][0] = 7;
            lovligeRokadeFlytt[8][1] = 1;
            lovligeRokadeFlytt[9][0] = 10;
            lovligeRokadeFlytt[9][1] = 10;
            rokadePosX = 7;
            rokadePosY = 1;
            return lovligeRokadeFlytt;
        } else if(rokade2 && brikke.getFarge().equals("Hvit")){
            lovligeRokadeFlytt[8][0] = 7;
            lovligeRokadeFlytt[8][1] = 6;
            lovligeRokadeFlytt[9][0] = 10;
            lovligeRokadeFlytt[9][1] = 10;
            rokadePosX = 7;
            rokadePosY = 6;
            return lovligeRokadeFlytt;
        } else if(rokade3 && rokade4 && brikke.getFarge().equals("Svart")){
            lovligeRokadeFlytt[8][0] = 0;
            lovligeRokadeFlytt[8][1] = 1;
            lovligeRokadeFlytt[9][0] = 0;
            lovligeRokadeFlytt[9][1] = 6;
            rokade = true;
            return lovligeRokadeFlytt;
        } else if(rokade3 && brikke.getFarge().equals("Svart")){
            lovligeRokadeFlytt[8][0] = 0;
            lovligeRokadeFlytt[8][1] = 1;
            lovligeRokadeFlytt[9][0] = 10;
            lovligeRokadeFlytt[9][1] = 10;
            rokadePosX = 0;
            rokadePosY = 1;
            return lovligeRokadeFlytt;
        } else if(rokade4 && brikke.getFarge().equals("Svart")){
            lovligeRokadeFlytt[8][0] = 0;
            lovligeRokadeFlytt[8][1] = 6;
            lovligeRokadeFlytt[9][0] = 10;
            lovligeRokadeFlytt[9][1] = 10;
            rokadePosX = 0;
            rokadePosY = 6;
            return lovligeRokadeFlytt;
        }
        return lovligeFlytt;
    }
    public int[][] getLovligeFlytt(Brikke brikke){
        int[][] lovligeFlytt = brikke.lovligeFlytt();
        if(sjekkFarge.equals(brikke.getFarge())){
            for(int i=0;i<lovligeFlytt.length;i++){
                lovligeFlytt[i][0] = 10;
                lovligeFlytt[i][1] = 10;
            }
            return lovligeFlytt;
        }
        for(int i=0;i<lovligeFlytt.length;i++){
            if(lovligeFlytt[i][0] < 0 || lovligeFlytt[i][0] > 7 || lovligeFlytt[i][1] < 0 || lovligeFlytt[i][1] > 7){
                /*
                 * Trekk som prøver å gå utenfor brettet.
                 */
                lovligeFlytt[i][0] = 10;
                lovligeFlytt[i][1] = 10;
            } else if((sjekkPosisjon(lovligeFlytt[i][0], lovligeFlytt[i][1]))){
                /*
                 * Trekk mot lik farget brikke.
                 */
                if(getBrikke(lovligeFlytt[i][0], lovligeFlytt[i][1]).getFarge().equals(brikke.getFarge())){
                    lovligeFlytt[i][0] = 10;
                    lovligeFlytt[i][1] = 10;
                }
            } 
        }
        if(brikke instanceof Bonde){
            for(int i=1;i<3;i++){
                /*
                 * Sjekker angrepsrutene.
                 */
                if(sjekkPosisjon(lovligeFlytt[i][0], lovligeFlytt[i][1]) == false){
                    lovligeFlytt[i][0] = 10;
                    lovligeFlytt[i][1] = 10;
                }
            }
            /*
             * Sjekker om ruten foran er opptatt. Setter alle mulige trekk fremover til ugyldig.
             */
            if(sjekkPosisjon(lovligeFlytt[0][0], lovligeFlytt[0][1])){
                lovligeFlytt[0][0] = 10;
                lovligeFlytt[0][1] = 10;
            }
            if(brikke.getStartPos()){
                /*
                 * Sjekker om ruten 2 foran er opptatt. Gjelder kun for startposisjon.
                 */
                if(sjekkPosisjon(lovligeFlytt[0][0], lovligeFlytt[0][1])){
                    lovligeFlytt[0][0] = 10;
                    lovligeFlytt[0][1] = 10;
                    lovligeFlytt[3][0] = 10;
                    lovligeFlytt[3][1] = 10;
                }
                if(sjekkPosisjon(lovligeFlytt[3][0], lovligeFlytt[3][1])){
                    lovligeFlytt[3][0] = 10;
                    lovligeFlytt[3][1] = 10;
                }
            }
        } else if(brikke instanceof Taarn){
            for(int i=0;i<lovligeFlytt.length;i++){
                /*
                 * Sjekker om rutene foran er opptatt.
                 */
                if(sjekkPosisjon(lovligeFlytt[i][0], lovligeFlytt[i][1])){
                    if(i<7){
                        /*
                         * Sjekker bevegelse nedover. Setter alle trekk etter en brikke til ugyldig.
                         */
                        for(int j=i+1;j<7;j++){
                            lovligeFlytt[j][0] = 10;
                            lovligeFlytt[j][1] = 10;
                        }
                    } else if(i>=7 && i<14){
                        /*
                         * Sjekker bevegelse oppover. Setter alle trekk etter en brikke til ugyldig.
                         */
                        for(int j=i+1;j<14;j++){
                            lovligeFlytt[j][0] = 10;
                            lovligeFlytt[j][1] = 10;

                        }
                    } else if(i>=14 && i<21){
                        /*
                         * Sjekker bevegelse høyre. Setter alle trekk etter en brikke til ugyldig.
                         */
                        for(int j=i+1;j<21;j++){
                            lovligeFlytt[j][0] = 10;
                            lovligeFlytt[j][1] = 10;
                        }
                    } else if(i>=21 && i<28){
                        /*
                         * Sjekker bevegelse venstre. Setter alle trekk etter en brikke til ugyldig.
                         */
                        for(int j=i+1;j<28;j++){
                            lovligeFlytt[j][0] = 10;
                            lovligeFlytt[j][1] = 10;
                        }
                    }
                }
            }
        } else if(brikke instanceof Loper){
            for(int i=0;i<lovligeFlytt.length;i++){
                /*
                 * Sjekker om rutene foran er opptatt.
                 */
                if(sjekkPosisjon(lovligeFlytt[i][0], lovligeFlytt[i][1])){
                    if(i<7){
                        /*
                         * Sjekker bevegelse nedover mot høyre.
                         */
                        for(int j=i+1;j<7;j++){
                            lovligeFlytt[j][0] = 10;
                            lovligeFlytt[j][1] = 10;
                        }
                    } else if(i>=7 && i<14){
                        /*
                         * Sjekker bevegelse oppover mot venstre.
                         */
                        for(int j=i+1;j<14;j++){
                            lovligeFlytt[j][0] = 10;
                            lovligeFlytt[j][1] = 10;

                        }
                    } else if(i>=14 && i<21){
                        /*
                         * Sjekker bevegelse oppover mot høyre.
                         */
                        for(int j=i+1;j<21;j++){
                            lovligeFlytt[j][0] = 10;
                            lovligeFlytt[j][1] = 10;
                        }
                    } else if(i>=21 && i<28){
                        /*
                         * Sjekker bevegelse nedover mot venstre.
                         */
                        for(int j=i+1;j<28;j++){
                            lovligeFlytt[j][0] = 10;
                            lovligeFlytt[j][1] = 10;
                        }
                    }
                }
            }
        } else if(brikke instanceof Dronning){
            for(int i=0;i<lovligeFlytt.length;i++){
                /*
                 * Sjekker om rutene foran er opptatt.
                 */
                if(sjekkPosisjon(lovligeFlytt[i][0], lovligeFlytt[i][1])){
                    if(i<7){
                        /*
                         * Sjekker bevegelse nedover. Setter alle trekk etter en brikke til ugyldig.
                         */
                        for(int j=i+1;j<7;j++){
                            lovligeFlytt[j][0] = 10;
                            lovligeFlytt[j][1] = 10;
                        }
                    } else if(i>=7 && i<14){
                        /*
                         * Sjekker bevegelse oppover. Setter alle trekk etter en brikke til ugyldig.
                         */
                        for(int j=i+1;j<14;j++){
                            lovligeFlytt[j][0] = 10;
                            lovligeFlytt[j][1] = 10;

                        }
                    } else if(i>=14 && i<21){
                        /*
                         * Sjekker bevegelse høyre. Setter alle trekk etter en brikke til ugyldig.
                         */
                        for(int j=i+1;j<21;j++){
                            lovligeFlytt[j][0] = 10;
                            lovligeFlytt[j][1] = 10;
                        }
                    } else if(i>=21 && i<28){
                        /*
                         * Sjekker bevegelse venstre. Setter alle trekk etter en brikke til ugyldig.
                         */
                        for(int j=i+1;j<28;j++){
                            lovligeFlytt[j][0] = 10;
                            lovligeFlytt[j][1] = 10;
                        }
                    } else if(i>=28 && i<35){
                        /*
                         * Sjekker bevegelse nedover mot høyre.
                         */
                        for(int j=i+1;j<35;j++){
                            lovligeFlytt[j][0] = 10;
                            lovligeFlytt[j][1] = 10;
                        }
                    } else if(i>=35 && i<42){
                        /*
                         * Sjekker bevegelse oppover mot venstre.
                         */
                        for(int j=i+1;j<42;j++){
                            lovligeFlytt[j][0] = 10;
                            lovligeFlytt[j][1] = 10;

                        }
                    } else if(i>=42 && i<49){
                        /*
                         * Sjekker bevegelse oppover mot høyre.
                         */
                        for(int j=i+1;j<49;j++){
                            lovligeFlytt[j][0] = 10;
                            lovligeFlytt[j][1] = 10;
                        }
                    } else if(i>=49 && i<56){
                        /*
                         * Sjekker bevegelse nedover mot venstre.
                         */
                        for(int j=i+1;j<56;j++){
                            lovligeFlytt[j][0] = 10;
                            lovligeFlytt[j][1] = 10;
                        }
                    }
                }
            }
        }
        if(brikke instanceof Konge && brikke.getStartPos() && sjakk.equals("Nei")){
            return getRokade(brikke, lovligeFlytt);
        }
        if(brikke.getFarge().equals(sjakk)){
            return hindreSjakk(brikke, lovligeFlytt);
        }
        return lovligeFlytt;
    }
    public String toString(){
        return beskjeder;
    }
}